#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>
#include <sqlite3.h>
#include <string.h>

#define NDOCENTES 100000
/*
 Callback da Lista dos titulares de cada grau
 */
static int callbackListaTitularesGrau(char*** lista, int argc, char **argv, char **azColName){
	int i;
	for(i=0; i<argc; i++){
		if(i == 0){
			printf("%s\n", argv[0]);
			sprintf(**lista, "%s", argv[0]);
			
			(*lista)++;		
		}
    }
    return 0;
}

/*
	Lista dos titulares dos graus
 */
int listaTitularesGrau(int ano)
{
	int i, j, h;
	sqlite3 *db;
	char *zErrMsg = 0;
	int rc;
	char** first;
	char** lista;

	lista = (char**) malloc(NDOCENTES * sizeof(char*));

	for(j = 0; j < NDOCENTES; j++){
		lista[j] = (char*) malloc(300 * sizeof(char));
	}

	first = lista;

	char listaGraus [3][20] = {"%licenci%","%mestre%","do%"};

	for(h = 0; h < 3; h ++)
	{	
		lista = first;
		char grau[20];
		sprintf(grau, "%s", listaGraus[h]);
	
		char anoString[10];
		sprintf(anoString, "%d", ano);
		
		char query[250] = "SELECT docente, grau, ano FROM registo_docentes WHERE grau LIKE ";

		char TGrau[23];
		sprintf(TGrau, "'%s'", grau);

		strcat(query, TGrau);
		
		char andAno [12] = " AND ano = ";
		strcat(query,andAno);
		strcat(query,anoString);
		printf("%s\n", query);
		
		rc = sqlite3_open("BaseDadosrebides.db", &db);
		rc = sqlite3_exec(db, query, callbackListaTitularesGrau, &lista, &zErrMsg);
		sqlite3_close(db);

		
		int strings_len = sizeof(*first) / sizeof(char *);
		printf("valor: %d\n", sizeof(*first));
		qsort(first, strings_len, sizeof(char *), strcmp  );

		for(i =0; i < 10; i++){
			printf("%d, %s\n", i, *first);
			first++;
		}
	}
	for(j=0; j < NDOCENTES; j++){
		free(first[j]);
	}
	free(first);
	return(0);
}

int main(){
	int ano = 0;
	listaTitularesGrau(ano);
	exit(0);
}
